7451. Точка

 

Точка задается своими x и y координатами: (x, y).

Заданы две точки (a, b), (c, d) и целое число n. Сложите их.

·        Сложение двух точек означает сложение их соответствующих координат: (1, 2) + (3, 4) = (4, 6).

·        Сложение точки и числа означает прибавление числа к ее обеим координатам: (1, 2) + 10 = (11, 12).

 

Напишите код согласно следующего интерфейса:

 

class Point // C++

{

private:

  int x, y;

public:

  Point(int x = 0, int y = 0); // Конструктор

  void Read(void); // Читает координаты вектора

  void Print(void); // Выводит координаты вектора

  Point operator +(const Point &a); // Перегрузка оператора +:

                                    // возвращает сумму двух точек

  Point operator +(int value); // Перегрузка оператора +:

                              // возвращает сумму точки и целого числа

  int getX(void); // Вернуть x координату

  int getY(void); // Вернуть y координату

  void SetX(int x); // Установить x координату

  void SetY(int y); // Установить y координату

};

 

class Point // Java

{

  private int x, y;

  Point(int x, int y); // Конструктор

  public String toString(); // Возвращает координаты вектора

  public Point Add(int v); // Прибавить к обеим координатам точки

                           // значение v, вернуть точку

  public Point Add(Point p); // Прибавить точку p, вернуть сумму

                             // двух точек

  public int getX(); // Вернуть x координату

  public int getY(); // Вернуть y координату

  public void SetX(int x); // Установить x координату

  public void SetY(int y); // Установить y координату

};

 

Вход. Первая строка содержит координаты a и b первой точки. Вторая строка содержит координаты c и d второй точки. Третья строка содержит целое число n. Все числа по модулю не превосходят 10000.

 

Выход. Выведите сумму двух точек и числа.

 

Пример входа

Пример выхода

1 2

3 4

10

14 16

 

 

РЕШЕНИЕ

ООП – перегрузка операторов

 

Анализ алгоритма

Объявим класс Point и реализуем требуемые методы.

 

Реализация алгоритма

 

#include <stdio.h>

 

class Point

{

public:

  int x, y;

  Point(int x = 0, int y = 0) : x(x), y(y) {}

 

  void Read(void)

  {

    scanf("%d %d",&x,&y);

  }

 

  void Print(void)

  {

    printf("%d %d\n",x,y);

  }

 

  Point operator +(const Point &a)

  {

    return Point(x + a.x, y + a.y);

  }

 

  Point operator +(int value)

  {

    return Point(x + value, y + value);

  }

};

 

int main(void)

{

  Point a, b, c;

  a.Read(); b.Read();

 

  int n;

  scanf("%d",&n);

 

  c = a + b + n;

  c.Print();

  return 0;

}

 

Реализация алгоритма – описание интерфейса + отдельная реализация методов

 

#include <stdio.h>

 

class Point {

public:

  Point(int x, int y);

  int getX();

  int getY();

  void SetX(int x);

  void SetY(int y);

  Point operator+(int v);

  Point operator+(Point &a);

  void Read();

  void Print();

private:

  int x;

  int y;

};

 

Point::Point(int x = 0, int y = 0) {

   this->x = x;

   this->y = y;

}

 

int Point::getX() {

  return x;

}

 

int Point::getY() {

  return y;

}

 

void Point::SetX(int x) {

  this->x = x;

}

 

void Point::SetY(int y) {

  this->y = y;

}

 

Point Point::operator+(int v) {

  return Point(x + v, y + v);

}

 

Point Point::operator+(Point &a) {

  return Point(x + a.getX(), y + a.getY());

}

 

void Point::Read() {

  scanf("%d %d",&x,&y);

}

 

void Point::Print() {

  printf("%d %d\n",x,y);

}

 

int main(void)

{

  Point a, b, c;

  a.Read(); b.Read();

  int n;

  scanf("%d",&n);

  c = a + b + n;

  c.Print();

  return 0;

}

 

Java реализация

 

import java.util.*;

 

class Point

{

  private int x, y;

 

  Point(int x, int y)

  {

     this.x = x;

     this.y = y;

  }

 

  public void SetX(int x)

  {

    this.x = x;

  }

 

  public void SetY(int y)

  {

    this.y = y;

  }

 

  public int GetX()

  {

    return x;

  }

 

  public int GetY()

  {

    return y;

  }

 

  public Point Add(Point a)

  {

    return new Point(this.x + a.x, this.y + a.y);

  }

 

  public Point Add(int x)

  {

    return new Point(this.x + x, this.y + x);

  }

 

  public String toString()

  {

    return x + " " + y;

  }

}

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int x = con.nextInt(), y = con.nextInt();   

    Point a = new Point(x,y);

 

    x = con.nextInt(); y = con.nextInt();   

    Point b = new Point(x,y);

 

    int n = con.nextInt();

    Point c = a.Add(b).Add(n);

    System.out.println(c);

    con.close();

  }

}